import type { BaseStatus } from "@/typing";
import type { BaseFields } from "../typing";
import type { QueryResult } from "../system/api/typing";

/**登录参数 */
export interface LoginParams {
  /**用户名 */
  username: string;
  /**密码 */
  password: string;
}

/**登录响应 */
export interface LoginResult {
  /**请求token */
  accessToken: string;
  /**刷新Token */
  refreshToken: string;
}

/**获取用户信息响应 */
export interface UserInfo extends BaseFields {
  /**用户ID */
  userId: string;
  /**头像 */
  avatar: string;
  /**头像访问路径 */
  avatarUrl: string;
  /**用户名 */
  username: string;
  /**密码 */
  password: string;
  /**昵称 */
  nickname: string;
  /**积分 */
  integration: number;
  /**默认角色ID */
  defaultRoleId: string;
  /**默认组织ID */
  defaultOrganizationId: string;
  /**功能权限列表 */
  fnApiMap: { [key: string]: QueryResult[] };
}

/**菜单选项 */
export interface MenuOption {
  /**菜单ID */
  menuId: string;
  /**菜单名称 */
  menuName: string;
  /**菜单编码 */
  menuCode: string;
  /**菜单描述 */
  menuDesc: string;
  /**菜单Icon */
  menuIcon: string;
  /**菜单状态 */
  menuStatus: BaseStatus;
  /**父级菜单ID */
  parentMenuId: string;
  /**子级菜单 */
  menus: MenuOption[];
  /**国际化Key */
  localeKey: string;
  /**菜单功能 */
  functions: FunctionOption[];
}
/**功能选项 */
export interface FunctionOption {
  /**功能ID */
  functionId: string;
  /**功能名称 */
  functionName: string;
  /**功能编码 */
  functionCode: string;
  /**功能描述 */
  functionDesc: string;
  /**功能图标 */
  functionIcon: string;
  /**功能状态 */
  functionStatus: BaseStatus;
  /**访问路径 */
  accessPath: string;
  /**前端组件 */
  component: string;
  /**国际化Key */
  localeKey: string;
  /**功能权限 */
  permissions: PermissionOption[];
}
/**权限选项 */
export interface PermissionOption {
  /**权限ID */
  permissionId: string;
  /**功能ID */
  functionId: string;
  /**权限编码 */
  permissionCode: string;
  /**权限名称 */
  permissionName: string;
  /**接口ID */
  interfaceId: string;
}
/**菜单或功能 */
export type FnMenu = FunctionOption | MenuOption;
/**菜单树 */
export type MenuTree = FnMenu[];

/**修改密码参数 */
export interface PasswordParams {
  /**原密码 */
  originPassword: string;
  /**新密码 */
  newPassword: string;
  /**确认密码 */
  confirmPassword: string;
}

/**发送邮箱验证码参数 */
export interface SendEmailParams {
  /**邮箱 */
  email: string;
}

/**验证邮箱验证码参数 */
export interface VerifyEmailParams extends SendEmailParams {
  /**验证码 */
  code: string;
}

/**重置密码参数 */
export interface ResetPasswordParams {
  /**邮箱 */
  email: string;
  /**密码 */
  password: string;
}
